//! 繁简体汉字词互转
//! 
//! `STCustomDictionary.txt` 用户自定义简体转繁体字典
//! 
//! `TSCustomDictionary.txt` 用户自定义繁体转简体字典
//! 
//! `s2t_dict.rs` 简体转繁体字典: 用户自定义字典 + MediaWiki + OpenCC
//! 
//! `t2s_dict.rs` 繁体转简体字典: 用户自定义字典 + MediaWiki + OpenCC
//! 
//! `*_dict.rs` 由 `build.rs` 自动获取在线最新数据装配更新, 请勿手动修改
//! 
//! `*_dict.rs` 优先级: 用户自定义字典 > MediaWiki > OpenCC
//! 
//! `*_dict.rs` 字典不区分 `字符` 和 `词` 根据高内聚低耦合原则, 统一视为 `词`, 请适用其他程序对文本分词, 再调用本模块进行转换, 转换原则: `整词` 优先

use once_cell::sync::Lazy;
use std::collections::HashMap;

pub static S2T: Lazy<HashMap<&str, &str>> = Lazy::new(|| include!("s2t_dict.rs").into_iter().copied().collect());
pub static T2S: Lazy<HashMap<&str, &str>> = Lazy::new(|| include!("t2s_dict.rs").into_iter().copied().collect());

pub fn converter(input: &str, tp: &str) -> String {
    if input.is_empty() { return String::new() }
    let map = match tp {
        "t2s" => &T2S,
        "s2t" => &S2T,
        _ => return String::new()
    };
    match map.contains_key(input) {
        true => map[input].to_string(),
        false => input.chars().map(|c| {
            if map.contains_key(c.to_string().as_str()) {
                map[c.to_string().as_str()].to_string()
            } else {
                c.to_string().clone()
            }
        }).collect()
    }
}
